#ifndef OR_H_
#define OR_H_

#include "requirement.h"
#include <boost/shared_ptr.hpp>

using boost::shared_ptr;

/// Logical alternation of two requirements.
class Or : public Requirement {
    /// Left requirement of alternation.
    shared_ptr<Requirement> lreq_;

    /// Right requirement of alternation.
    shared_ptr<Requirement> rreq_;
    
public:
    Or(shared_ptr<Requirement>, shared_ptr<Requirement>);
    
    bool evaluate(Context&);
    std::string to_string(Context&);
    std::size_t count(Context&);
    std::list<Course> courses();
};

#endif
